namespace ext.data
{
	using System;
	using System.Runtime.CompilerServices;
	using System.Html;
	using System.Collections;
	
	
	/// <summary>Configuration Structure</summary>
	/// <definedin>src\data\XmlWriter.js</definedin>
	public sealed class XmlWriter_Configuration : Record
	{
		
		#region Fields
		/// <summary>
		/// [xrequest] (Optional) The name of the XML document root-node. Note:
		/// this parameter is required only when sending extra {@link Ext.data.Store#baseParams baseParams} to the server
		/// during a write-request -- if no baseParams are set, the {@link Ext.data.XmlReader#record} meta-property can
		/// suffice as the XML document root-node for write-actions involving just a single record. For requests
		/// involving multiple records and NO baseParams, the {@link Ext.data.XmlWriter#root} property can
		/// act as the XML document root.
		/// </summary>
		/// <htmlSummary>
		/// [xrequest] (Optional) The name of the XML document root-node. &lt;b&gt;Note:&lt;/b&gt;
		/// this parameter is required &lt;/b&gt;only when&lt;/b&gt; sending extra {@link Ext.data.Store#baseParams baseParams} to the server
		/// during a write-request -- if no baseParams are set, the {@link Ext.data.XmlReader#record} meta-property can
		/// suffice as the XML document root-node for write-actions involving just a &lt;b&gt;single record&lt;/b&gt;. For requests
		/// involving &lt;b&gt;multiple&lt;/b&gt; records and &lt;b&gt;NO&lt;/b&gt; baseParams, the {@link Ext.data.XmlWriter#root} property can
		/// act as the XML document root.
		/// </htmlSummary>
		/// <definedin>src\data\XmlWriter.js</definedin>
		[ScriptName("documentRoot")]
		public string DocumentRoot;
		
		/// <summary>
		/// [false] Set to true to force XML documents having a root-node as defined
		/// by {@link #documentRoot}, even with no baseParams defined.
		/// </summary>
		/// <htmlSummary>
		/// [false] Set to &lt;tt&gt;true&lt;/tt&gt; to force XML documents having a root-node as defined
		/// by {@link #documentRoot}, even with no baseParams defined.
		/// </htmlSummary>
		/// <definedin>src\data\XmlWriter.js</definedin>
		[ScriptName("forceDocumentRoot")]
		public bool ForceDocumentRoot;
		
		/// <summary>
		/// [records] The name of the containing element which will contain the nodes of an write-action involving multiple records. Each
		/// xml-record written to the server will be wrapped in an element named after {@link Ext.data.XmlReader#record} property.
		/// eg:
		/// 
		/// &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
		/// &amp;lt;user&gt;&amp;lt;first&gt;Barney&amp;lt;/first&gt;&amp;lt;/user&gt;
		/// 
		/// However, when multiple records are written in a batch-operation, these records must be wrapped in a containing
		/// Element.
		/// eg:
		/// 
		/// &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
		/// &amp;lt;records&gt;
		/// &amp;lt;first&gt;Barney&amp;lt;/first&gt;&amp;lt;/user&gt;
		/// &amp;lt;records&gt;&amp;lt;first&gt;Barney&amp;lt;/first&gt;&amp;lt;/user&gt;
		/// &amp;lt;/records&gt;
		/// 
		/// Defaults to records. Do not confuse the nature of this property with that of {@link #documentRoot}
		/// </summary>
		/// <htmlSummary>
		/// [records] The name of the containing element which will contain the nodes of an write-action involving &lt;b&gt;multiple&lt;/b&gt; records. Each
		/// xml-record written to the server will be wrapped in an element named after {@link Ext.data.XmlReader#record} property.
		/// eg:
		/// &lt;code&gt;&lt;pre&gt;
		/// &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
		/// &amp;lt;user&gt;&amp;lt;first&gt;Barney&amp;lt;/first&gt;&amp;lt;/user&gt;
		/// &lt;/code&gt;&lt;/pre&gt;
		/// However, when &lt;b&gt;multiple&lt;/b&gt; records are written in a batch-operation, these records must be wrapped in a containing
		/// Element.
		/// eg:
		/// &lt;code&gt;&lt;pre&gt;
		/// &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
		/// &amp;lt;records&gt;
		/// &amp;lt;first&gt;Barney&amp;lt;/first&gt;&amp;lt;/user&gt;
		/// &amp;lt;records&gt;&amp;lt;first&gt;Barney&amp;lt;/first&gt;&amp;lt;/user&gt;
		/// &amp;lt;/records&gt;
		/// &lt;/code&gt;&lt;/pre&gt;
		/// Defaults to &lt;tt&gt;records&lt;/tt&gt;. Do not confuse the nature of this property with that of {@link #documentRoot}
		/// </htmlSummary>
		/// <definedin>src\data\XmlWriter.js</definedin>
		[ScriptName("root")]
		public string Root;
		
		/// <summary>
		/// [1.0] The version written to header of xml documents.
		/// &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-15&quot;?&gt;
		/// </summary>
		/// <htmlSummary>
		/// [1.0] The &lt;tt&gt;version&lt;/tt&gt; written to header of xml documents.
		/// &lt;code&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-15&quot;?&gt;&lt;/pre&gt;&lt;/code&gt;
		/// </htmlSummary>
		/// <definedin>src\data\XmlWriter.js</definedin>
		[ScriptName("xmlVersion")]
		public string XmlVersion;
		
		/// <summary>
		/// [ISO-8859-15] The encoding written to header of xml documents.
		/// &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-15&quot;?&gt;
		/// </summary>
		/// <htmlSummary>
		/// [ISO-8859-15] The &lt;tt&gt;encoding&lt;/tt&gt; written to header of xml documents.
		/// &lt;code&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-15&quot;?&gt;&lt;/pre&gt;&lt;/code&gt;
		/// </htmlSummary>
		/// <definedin>src\data\XmlWriter.js</definedin>
		[ScriptName("xmlEncoding")]
		public string XmlEncoding;
		
		/// <summary>
		/// The XML template used to render {@link Ext.data.Api#actions write-actions} to your server.
		/// One can easily provide his/her own custom {@link Ext.XTemplate#constructor template-definition} if the default does not suffice.  Defaults to:  
		/// &amp;lt;?xml version=&quot;{version}&quot; encoding=&quot;{encoding}&quot;?&gt;
		/// &amp;lt;tpl if=&quot;documentRoot&quot;&gt;&amp;lt;{documentRoot}&gt;
		/// &amp;lt;tpl for=&quot;baseParams&quot;&gt;
		/// &amp;lt;tpl for=&quot;.&quot;&gt;
		/// &amp;lt;{name}&gt;{value}&amp;lt;/{name}&gt;
		/// &amp;lt;/tpl&gt;
		/// &amp;lt;/tpl&gt;
		/// &amp;lt;tpl if=&quot;records.length &amp;gt; 1&quot;&gt;&amp;lt;{root}&gt;&apos;,
		/// &amp;lt;tpl for=&quot;records&quot;&gt;
		/// &amp;lt;{parent.record}&gt;
		/// &amp;lt;tpl for=&quot;.&quot;&gt;
		/// &amp;lt;{name}&gt;{value}&amp;lt;/{name}&gt;
		/// &amp;lt;/tpl&gt;
		/// &amp;lt;/{parent.record}&gt;
		/// &amp;lt;/tpl&gt;
		/// &amp;lt;tpl if=&quot;records.length &amp;gt; 1&quot;&gt;&amp;lt;/{root}&gt;&amp;lt;/tpl&gt;
		/// &amp;lt;tpl if=&quot;documentRoot&quot;&gt;&amp;lt;/{documentRoot}&gt;&amp;lt;/tpl&gt;
		///  Templates will be called with the following API   {String} version [1.0] The xml version.  {String} encoding [ISO-8859-15] The xml encoding.  {String/false} documentRoot The XML document root-node name or false if not required. See {@link...
		/// </summary>
		/// <htmlSummary>
		/// The XML template used to render {@link Ext.data.Api#actions write-actions} to your server.
		/// &lt;p&gt;One can easily provide his/her own custom {@link Ext.XTemplate#constructor template-definition} if the default does not suffice.&lt;/p&gt;
		/// &lt;p&gt;Defaults to:&lt;/p&gt;
		/// &lt;code&gt;&lt;pre&gt;
		/// &amp;lt;?xml version=&quot;{version}&quot; encoding=&quot;{encoding}&quot;?&gt;
		/// &amp;lt;tpl if=&quot;documentRoot&quot;&gt;&amp;lt;{documentRoot}&gt;
		/// &amp;lt;tpl for=&quot;baseParams&quot;&gt;
		/// &amp;lt;tpl for=&quot;.&quot;&gt;
		/// &amp;lt;{name}&gt;{value}&amp;lt;/{name}&gt;
		/// &amp;lt;/tpl&gt;
		/// &amp;lt;/tpl&gt;
		/// &amp;lt;tpl if=&quot;records.length &amp;gt; 1&quot;&gt;&amp;lt;{root}&gt;&apos;,
		/// &amp;lt;tpl for=&quot;records&quot;&gt;
		/// &amp;lt;{parent.record}&gt;
		/// &amp;lt;tpl for=&quot;.&quot;&gt;
		/// &amp;lt;{name}&gt;{value}&amp;lt;/{name}&gt;
		/// &amp;lt;/tpl&gt;
		/// &amp;lt;/{parent.record}&gt;
		/// &amp;lt;/tpl&gt;
		/// &amp;lt;tpl if=&quot;records.length &amp;gt; 1&quot;&gt;&amp;lt;/{root}&gt;&amp;lt;/tpl&gt;
		/// &amp;lt;tpl if=&quot;documentRoot&quot;&gt;&amp;lt;/{documentRoot}&gt;&amp;lt;/tpl&gt;
		/// &lt;/pre&gt;&lt;/code&gt;
		/// &lt;p&gt;Templates will be called with the following API&lt;/p&gt;
		/// &lt;ul&gt;
		/// &lt;li&gt;{String} version [1.0] The xml version.&lt;/li&gt;
		/// &lt;li&gt;{String} encoding [ISO-8859-15] The xml encoding.&lt;/li&gt;
		/// &lt;li&gt;{String/false} documentRoot The XML document root-node name or &lt;tt&gt;false&lt;/tt&gt; if not required. See {@link #documentRoot} and {@link #forceDocumentRoot}.&lt;/li&gt;
		/// &lt;li&gt;{String} record The meta-data parameter defined on your {@link Ext.data.XmlReader#record} configuration represents the name of the xml-tag containing each record.&lt;/li&gt;
		/// &lt;li&gt;{String} root The meta-data parameter defined by {@link Ext.data.XmlWriter#root} configuration-parameter. Represents the name of the xml root-tag when sending &lt;b&gt;multiple&lt;/b&gt; records to the server.&lt;/li&gt;
		/// &lt;li&gt;{Array} records The records being sent to the server, ie: the subject of the write-action being performed. The records parameter will be always be an array, even when only a single record is being acted upon.
		/// Each item within the records array will contain an array of field objects having the following properties:
		/// &lt;ul&gt;
		/// &lt;li&gt;{String} name The field-name of the record as defined by your {@link Ext.data.Record#create Ext.data.Record definition}. The &quot;mapping&quot; property will be used, otherwise it will match the &quot;name&quot; property. Use this parameter to define the XML tag-name of the property.&lt;/li&gt;
		/// &lt;li&gt;{Mixed} value The record value of the field enclosed within XML tags specified by name property above.&lt;/li&gt;
		/// &lt;/ul&gt;&lt;/li&gt;
		/// &lt;li&gt;{Array} baseParams. The baseParams as defined upon {@link Ext.data.Store#baseParams}. Note that the baseParams have been converted into an array of [{name : &quot;foo&quot;, value: &quot;bar&quot;}, ...] pairs in the same manner as the &lt;b&gt;records&lt;/b&gt; parameter above. See {@link #documentRoot} and {@link #forceDocumentRoot}.&lt;/li&gt;
		/// &lt;/ul&gt;
		/// </htmlSummary>
		/// <definedin>src\data\XmlWriter.js</definedin>
		[ScriptName("tpl")]
		public ext.auto.System_String_Or_ext_XTemplate Tpl;
		#endregion
		
		#region ext.data.DataWriter_Configuration Members
		/// <summary>
		/// false by default. Set true to have DataWriter return ALL fields of a modified
		/// record -- not just those that changed.
		/// false to have DataWriter only request modified fields from a record.
		/// </summary>
		/// <htmlSummary>
		/// &lt;tt&gt;false&lt;/tt&gt; by default. Set &lt;tt&gt;true&lt;/tt&gt; to have DataWriter return ALL fields of a modified
		/// record -- not just those that changed.
		/// &lt;tt&gt;false&lt;/tt&gt; to have DataWriter only request modified fields from a record.
		/// </htmlSummary>
		/// <definedin>src\data\DataWriter.js</definedin>
		[ScriptName("writeAllFields")]
		public bool WriteAllFields;
		
		/// <summary>
		/// false by default. Set true to have the DataWriter always write HTTP params as a list,
		/// even when acting upon a single record.
		/// </summary>
		/// <htmlSummary>
		/// &lt;tt&gt;false&lt;/tt&gt; by default. Set &lt;tt&gt;true&lt;/tt&gt; to have the DataWriter &lt;b&gt;always&lt;/b&gt; write HTTP params as a list,
		/// even when acting upon a single record.
		/// </htmlSummary>
		/// <definedin>src\data\DataWriter.js</definedin>
		[ScriptName("listful")]
		public bool Listful;
		
		/// <summary>
		/// Abstract method that should be implemented in all subclasses
		/// (e.g.: {@link Ext.data.JsonWriter#updateRecord JsonWriter.updateRecord}
		/// </summary>
		/// <definedin>src\data\DataWriter.js</definedin>
		[ScriptName("updateRecord")]
		public System.Delegate UpdateRecord;
		
		/// <summary>
		/// Abstract method that should be implemented in all subclasses
		/// (e.g.: {@link Ext.data.JsonWriter#createRecord JsonWriter.createRecord})
		/// </summary>
		/// <definedin>src\data\DataWriter.js</definedin>
		[ScriptName("createRecord")]
		public System.Delegate CreateRecord;
		
		/// <summary>
		/// Abstract method that should be implemented in all subclasses
		/// (e.g.: {@link Ext.data.JsonWriter#destroyRecord JsonWriter.destroyRecord})
		/// </summary>
		/// <definedin>src\data\DataWriter.js</definedin>
		[ScriptName("destroyRecord")]
		public System.Delegate DestroyRecord;
		#endregion
	}
}
